package algoritmos2011;


public class Usuario {

	private final int ACTIVO=1;
	private final int NOACTIVO=2;

	private String usuarioID;

	private LifoMensajes mensajes;
	private ListaInvitacionesEventos invitacionesEventos;
	private LifoSolicitudes solicitudAmistad;
	private ListaAmigos amigos;
	private int cantMensajesEnv;
	private int cantMensajesRec;
	private int cantAmigos;
	private int cantSolicitudesPend;
	private int Estado;
	private int cantEventosPend;

	public ListaInvitacionesEventos getInvitacionesEventos() {
		return invitacionesEventos;
	}
	public void setInvitacionesEventos(ListaInvitacionesEventos invitacionesEventos) {
		this.invitacionesEventos = invitacionesEventos;
	}
	public void setMensajes(LifoMensajes mensajes) {
		this.mensajes = mensajes;
	}
	public LifoSolicitudes getSolicitudAmistad() {
		return solicitudAmistad;
	}
	public int getCantMensajesEnv() {
		return cantMensajesEnv;
	}
	public void setCantMensajesEnv(int cantMensajesEnv) {
		this.cantMensajesEnv = cantMensajesEnv;
	}
	public int getCantMensajesRec() {
		return cantMensajesRec;
	}
	public void setCantMensajesRec(int cantMensajesRec) {
		this.cantMensajesRec = cantMensajesRec;
	}
	public int getCantAmigos() {
		return cantAmigos;
	}
	public void setCantAmigos(int cantAmigos) {
		this.cantAmigos = cantAmigos;
	}
	public int getCantSolicitudesPend() {
		return cantSolicitudesPend;
	}
	public void setCantSolicitudesPend(int cantSolicitudesPend) {
		this.cantSolicitudesPend = cantSolicitudesPend;
	}
	public int getCantEventosPend() {
		return cantEventosPend;
	}
	public void setCantEventosPend(int cantEventosPend) {
		this.cantEventosPend = cantEventosPend;
	}
	public void setSolicitudAmistad(LifoSolicitudes solicitudAmistad) {
		this.solicitudAmistad = solicitudAmistad;
	}


	public Usuario( String id){
		usuarioID=id;
		this.Estado=ACTIVO;
		invitacionesEventos=new ListaInvitacionesEventos();
		solicitudAmistad=new LifoSolicitudes();
		mensajes=new LifoMensajes();
		amigos=new ListaAmigos();
	}


	public String getUsuarioID() {
		return usuarioID;
	}


	public void setUsuarioID(String usuarioID) {
		this.usuarioID = usuarioID;
	}
	public ListaAmigos getAmigos() {
		return amigos;
	}
	public void setAmigos(ListaAmigos amigos) {
		this.amigos = amigos;
	}
	public int getEstado() {
		return Estado;
	}
	
	public void setEstado(int estado) {
		Estado = estado;
	}
	public LifoMensajes getMensajes() {
		return mensajes;
	}

	public int compareTo(Usuario usuTmp){

		return this.getUsuarioID().compareToIgnoreCase(usuTmp.getUsuarioID());
	}


	public void agregarAlistaDeAmigos(Usuario usr){
		
		NodoListaAmigos aux=new NodoListaAmigos(usr);
		agregarAmigo(aux);
		cantAmigos++;
	}

	public boolean buscarAmigo(String idBuscarAmigo){
		ListaAmigos misAmigos;
		misAmigos=amigos;

		if (misAmigos.esVacia()){
			return false;
		}else{
			return buscarAmigo(idBuscarAmigo,misAmigos.getInicio());
		}
	}
	private boolean  buscarAmigo(String idBuscarAmigo,NodoListaAmigos unAmigo){
		if (unAmigo==null){
			return false;
		}else if (unAmigo.getUsr().usuarioID.equalsIgnoreCase(idBuscarAmigo)){
			return true;
		}else{
			return buscarAmigo(idBuscarAmigo,unAmigo.getSig());	
		}
	}

	public void agregarEvento(String usuarioO, String nombreEvento,int fechaEvento, int horaEvento){ //agrega al inicio
		if(invitacionesEventos.esVacia()){
			agregarEventoInicio(usuarioO, nombreEvento, fechaEvento, horaEvento);
		}else{
			NodoListaInvitacionesEventos aux=invitacionesEventos.getFin();
			NodoListaInvitacionesEventos nuevo=new NodoListaInvitacionesEventos(usuarioO, nombreEvento, fechaEvento, horaEvento);
			aux.setSig(nuevo);
			invitacionesEventos.setFin(nuevo);
		}
	}

	public void agregarEventoInicio(String usuarioO, String nombreEvento, int fechaEvento, int horaEvento){
		NodoListaInvitacionesEventos nuevo=new NodoListaInvitacionesEventos(usuarioO, nombreEvento, fechaEvento, horaEvento);
		nuevo.setSig(invitacionesEventos.getInicio());
		invitacionesEventos.setInicio(nuevo);
		invitacionesEventos.setFin(nuevo);

	}
	public void agregarAmigo(NodoListaAmigos nuevo){
		nuevo.setSig(amigos.getInicio());
		amigos.setInicio(nuevo);	
	}
	
	public void destruirUsuario(){			
		this.getAmigos().vaciarListaAmigos();
		this.getInvitacionesEventos().vaciarListaInvitacionesEventos();
		this.getMensajes().vaciarLifoMensajes();
		this.getSolicitudAmistad().vaciarLifoSolicitudes();
	}
	
	public String verEstado(){
		if(Estado == ACTIVO)
			return "Activo";
			return "No Activo";
		
		
	}



}

